package me.jiatao.wan.data.repository

import androidx.paging.PagingConfig
import me.jiatao.wan.data.database.AppDataBase
import me.jiatao.wan.data.network.api.WanAndroidApi

/**
 * @Author: taojia
 * @CreateDate: 2021/8/24 6:23 下午
 * @Version: 1.0
 * @Description:
 */

object RepositoryFactory {
    private val pagingConfig = PagingConfig(
        /**
         * 定义从 PagingSource 一次加载的项目数。
         * 应该是屏幕上可见项目数量的几倍。
         * 配置页面大小取决于加载和使用数据的方式。 较小的页面大小可改善内存使用、延迟并避免 GC 流失。
         * 较大的页面通常会在一定程度上提高加载吞吐量（避免从 SQLite 一次加载超过 2MB，因为它会产生额外的成本）。
         */
        pageSize = 18,

        /**
         * 开启占位符
         */
        enablePlaceholders = true,

        /**
         * 预刷新的距离，距离最后一个 item 多远时加载数据
         * 默认为 pageSize
         */
        prefetchDistance = 4,

        /**
         * 初始化加载数量，默认为 pageSize * 3
         *
         * internal const val DEFAULT_INITIAL_PAGE_MULTIPLIER = 3
         * val initialLoadSize: Int = pageSize * DEFAULT_INITIAL_PAGE_MULTIPLIER
         */
        initialLoadSize = 18
    )

    fun makePokemonRepository(api: WanAndroidApi, db: AppDataBase): Repository =
        RepositoryImpl(
            api,
            db,
            pagingConfig,
        )
}